home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1997 December / PC Pro December 1997 CD-Rom coverdisc.iso / symantec / dbAnywh / JAVA.BIN / CLASSES.ZIP / sun / tools / tree / AssignAddExpression.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-14  |  3.6 KB  |  80 lines

  1. package sun.tools.tree;
  2.  
  3. import sun.tools.asm.Assembler;
  4. import sun.tools.java.AmbiguousField;
  5. import sun.tools.java.ClassDeclaration;
  6. import sun.tools.java.ClassDefinition;
  7. import sun.tools.java.ClassNotFound;
  8. import sun.tools.java.CompilerError;
  9. import sun.tools.java.Constants;
  10. import sun.tools.java.Environment;
  11. import sun.tools.java.FieldDefinition;
  12. import sun.tools.java.Type;
  13.  
  14. public class AssignAddExpression extends AssignOpExpression {
  15.    public AssignAddExpression(int var1, Expression var2, Expression var3) {
  16.       super(5, var1, var2, var3);
  17.    }
  18.  
  19.    void selectType(Environment var1, Context var2, int var3) {
  20.       if (super.left.type == Type.tString) {
  21.          super.type = Type.tString;
  22.       } else {
  23.          if ((var3 & 128) != 0) {
  24.             super.type = Type.tDouble;
  25.          } else if ((var3 & 64) != 0) {
  26.             super.type = Type.tFloat;
  27.          } else if ((var3 & 32) != 0) {
  28.             super.type = Type.tLong;
  29.          } else {
  30.             super.type = Type.tInt;
  31.          }
  32.  
  33.          super.right = ((Node)this).convert(var1, var2, super.type, super.right);
  34.       }
  35.    }
  36.  
  37.    public int costInline(int var1) {
  38.       return super.type.isType(10) ? 25 : super.costInline(var1);
  39.    }
  40.  
  41.    void code(Environment var1, Context var2, Assembler var3, boolean var4) {
  42.       if (super.type.isType(10)) {
  43.          int var5 = super.left.codeLValue(var1, var2, var3);
  44.          ((Expression)this).codeDup(var1, var2, var3, var5, 0);
  45.          super.left.codeLoad(var1, var2, var3);
  46.          ClassDeclaration var6 = var1.getClassDeclaration(Constants.idJavaLangStringBuffer);
  47.          var3.add(super.where, 187, var6);
  48.          var3.add(super.where, 89);
  49.  
  50.          try {
  51.             ClassDefinition var7 = var2.field.getClassDefinition();
  52.             FieldDefinition var8 = var6.getClassDefinition(var1).matchMethod(var1, var7, Constants.idInit);
  53.             var3.add(super.where, 183, var8);
  54.             var3.add(super.where, 95);
  55.             Type[] var9 = new Type[]{Type.tString};
  56.             var8 = var6.getClassDefinition(var1).matchMethod(var1, var7, Constants.idAppend, var9);
  57.             var3.add(super.where, 182, var8);
  58.             super.right.codeAppend(var1, var2, var3, var6);
  59.             var8 = var6.getClassDefinition(var1).matchMethod(var1, var7, Constants.idToString);
  60.             var3.add(super.where, 182, var8);
  61.             if (var4) {
  62.                ((Expression)this).codeDup(var1, var2, var3, super.type.stackSize(), var5);
  63.             }
  64.  
  65.             super.left.codeStore(var1, var2, var3);
  66.          } catch (ClassNotFound var10) {
  67.             throw new CompilerError(var10);
  68.          } catch (AmbiguousField var11) {
  69.             throw new CompilerError(var11);
  70.          }
  71.       } else {
  72.          super.code(var1, var2, var3, var4);
  73.       }
  74.    }
  75.  
  76.    void codeOperation(Environment var1, Context var2, Assembler var3) {
  77.       var3.add(super.where, 96 + super.type.getTypeCodeOffset());
  78.    }
  79. }
  80.